package me.zhengjie.pool.ipproxy;


import org.jsoup.Connection;
import org.jsoup.Jsoup;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * @Date 创建时间： 2021-01-14 10:22
 * @Author 作者姓名: WuNengDeShiXiong
 * @Version 1.0
 * @Copyright Copyright by
 * @Direction 类说明       验证代理的IP与端口
 */
public class IpInvalidUtils {

    private final static Logger logger = LoggerFactory.getLogger( IpSourceValid.class ) ;
    private final static String valid_url = "https://graph.qq.com/oauth2.0" ;      //自定义一个网站地址就可以了，百度、腾讯、阿里能够访问即可,返回信息越少越好

    private final static String User_Agent = "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4240.183 Safari/537.36" ;

    private final static int connent_timeout_normal = 2000 ;
    private final static int connent_timeout_slow = 5000 ;

    /****
     * 内部代理方法
     * @param ip
     * @param port
     * @return
     */
    public static boolean useless( String ip , Integer port){
        return useless(  ip ,  port , true ) ;
    }

    /****
     * 验证IP、端口 是否可用
     * @param ip
     * @param port
     * @return 无效的ip 返回true 有效的ip返回false
     */
    public static boolean useless( String ip , Integer port, Boolean high) {
        Connection jsoupConn = null;
        boolean requestIsFail = true ;
        try {
            //创建请求
            jsoupConn = Jsoup.connect( valid_url ).userAgent( User_Agent ) ;
            jsoupConn.proxy( ip , port ) ;
            if( high ) {
                //要求高-则检测时间必须在2秒内响应
                jsoupConn.timeout( connent_timeout_normal );     // timeout：设置连接主机超时（单位：毫秒）
            }else{
                //要求低-则检测时间必须在响应
                jsoupConn.timeout( connent_timeout_slow );       // timeout：设置连接主机超时（单位：毫秒）
            }
            //解析请求信息 能够解析到请求结果的一律认为访问成功
            Connection.Response resp = jsoupConn.execute();
            if ( resp.statusCode() > 0 ) {
                //String body = jsoupConn.get().getElementsByTag("body").html();
                requestIsFail = false ;
            }
        } catch (Exception e) {
            logger.error( "数据识别 此IP： {} 端口：{} 失败的原因：{}" , ip , port , e.getMessage() );
        }
        return requestIsFail ;
    }


}
